Allow max_pages to be set to less than tot_pages
authorKeir Fraser <keir@xen.org>
Sun, 24 Oct 2010 12:13:04 +0000 (13:13 +0100)
committerKeir Fraser <keir@xen.org>
Sun, 24 Oct 2010 12:13:04 +0000 (13:13 +0100)
The memory allocation code sometimes needs to enforce that a guest
that's been told to balloon down isn't going to expand further
(because it's still executing a previous balloon-up operation).  That
means being able to set the desired max_pages even before the balloon
driver has brought tot_pages down to the right level.

Signed-off-by: Tim Deegan <Tim.Deegan@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
xen/common/domctl.c

index 7bc976eb79f4ec7269d657a4e162d75a4f4252d5..f45c62e93c771746b5586559add74749cd637986 100644 (file)
@@ -770,11 +770,13 @@ long do_domctl(XEN_GUEST_HANDLE(xen_domctl_t) u_domctl)
         new_max = op->u.max_mem.max_memkb >> (PAGE_SHIFT-10);
 
         spin_lock(&d->page_alloc_lock);
-        if ( new_max >= d->tot_pages )
-        {
-            d->max_pages = new_max;
-            ret = 0;
-        }
+        /*
+         * NB. We removed a check that new_max >= current tot_pages; this means
+         * that the domain will now be allowed to "ratchet" down to new_max. In
+         * the meantime, while tot > max, all new allocations are disallowed.
+         */
+        d->max_pages = new_max;
+        ret = 0;
         spin_unlock(&d->page_alloc_lock);
 
     max_mem_out: